package com.cbh.amadeus.server.provider.tool;

import com.cbh.amadeus.server.domain.AckResultModel;

import java.util.List;

/**
 * ACK 模型器
 * <p>
 * 用以服务端记录消费者的ACK信息
 *
 * @author ChenBiHui
 * @date 2025/4/30
 */
public interface AckResultModelTool {

    /**
     * ID生成器
     *
     * @return 主键
     */
    String sequence();

    /**
     * 持久化操作 标记完成消息释放的订阅者ACK结果模型
     * 标记完成后, 消息重发阶段将自动忽略对应订阅者
     *
     * @param model ACK消息
     */
    void finish(AckResultModel model);

    /**
     * 匹配操作 获取在指定主题与消息ID内完成消息释放的ACK结果模型
     *
     * @param tenant    租户
     * @param topic     主题
     * @param messageId 消息ID
     * @return ACK结果模型
     */
    List<AckResultModel> match(String tenant, String topic, String messageId);
}
